package com.nanhua.test1.controller;

import com.nanhua.test1.pojo.Result;
import com.nanhua.test1.pojo.User;
import com.nanhua.test1.service.UserService;
import com.nanhua.test1.util.JwtUtil;
import com.nanhua.test1.util.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class UserController {
   @Autowired
   private UserService userService;
    @PostMapping("/register")
    public Result register(String username, String password) {
       User user = userService.findByName(username);
       System.out.println(user);
       if(user==null) {
           userService.register(username, password);
           return Result.success("注册成功");
       }else{
           return Result.error("该名字已被用户注册");
       }
   }

    /**
     * 验证username是否存在，若存在则判断password是否匹配
     * @return
     */

   @PostMapping (("/login"))
   public Result login(String username, String password){
        User user = userService.findByName(username);
        if(user==null) {
            return Result.error("该用户不存在");
        }else{
            if(user.getPassword().equals(password)) {
                Map<String, Object> claims = new HashMap<>();
                claims.put("id", user.getId());
                claims.put("username", user.getUsername());
                String token = JwtUtil.genToken(claims);
                return Result.success(token);
            }
            else {
                return Result.error("密码错误");
            }
        }
   }

    /**更换图片
     * 更改数据库中的图片的url
     * @param avatarUrl
     * @return 过程中只要没有异常就返回成功
     */
   @PatchMapping("/updateAvatar")
   public Result updateAvatar(String avatarUrl){
       userService.updateAvatar(avatarUrl);
       return Result.success();
   }

    /**更新密码
     * 老密码若错误返回error（老密码错误）
     * 若正确，则判断新密码和确认的密码是否相同，若不同返回error（新密码和确认的密码不同）
     * 若相同则传递新密码，并返回更新成功
     * @param old_pwd 老密码
     * @param new_pwd 新密码
     * @param re_pwd 确认新密码
     * @return
     */
    @PatchMapping("/updatePwd")
    public Result updatePwd(String old_pwd, String new_pwd,String re_pwd){
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer id = (Integer) map.get("id");
        User user=userService.findById(id);
        String password = user.getPassword();
        if(!password.equals(old_pwd)) {
            return Result.error("老密码错误");
        }
        else {
            if(!new_pwd.equals(re_pwd)) {
                return Result.error("新密码和确认的密码不同");
            }
            else {
                userService.updatePwd(re_pwd);
                return Result.success("密码更新成功");
            }
        }

    }
}
